Video compression standards use a variety of techniques to compress video data. The techniques include both lossy and lossless compression. The lossy compression typically takes advantage of spatial and temporal redundancies in the video data.
In a number of standards, such as MPEG-2, and Advanced Video Coding (AVC) (also known as the ITU-H.264 Specification, and MPEG-4, Part 10), pictures from the video data are divided into blocks. Reference frames are examined for similar blocks, and the blocks of a picture are coded as the difference between themselves and a similar block in the reference picture (known as the prediction error). Blocks from an area are grouped together forming what is known as a macroblock. The macroblocks are grouped together into groups forming what is known as a slice.
Generally, the slices are encoded using lossless coding, and the coding of symbols within a slice are dependent on other symbols of the slice. Although error detecting and correcting codes are used, enough errors in a slice can render the slice irrecoverable.
A picture includes a number of slice groups, each of which are lossless coded independent of each other. Accordingly, in the event that a burst error renders one slice irrecoverable, the remaining slice groups of the picture can be decoded. This can even perceptually mask the burst error to the viewer.
Decoders typically include buffers for storing a received bitstream comprising encoded video data. The buffer stores the bitstream as datawords. The datawords can vary in length, but there are advantages in storing the bitstream in wide datawords, such as 256-bit/32-byte words, known as Jumbo words (Jwords).
The bitstream is read by a variable length decoder. The variable length decoder decodes lossless codes encoding the video data. As noted above, the slice groups are losslessly encoded independent with respect to each other, however, the symbols within a slice group are encoded dependent on each other. Accordingly, the variable length decoder decodes the video data on a slice by slice basis.
The slices in the buffer do not necessarily begin and end at the boundaries of the data word. However, the memory controller fetches the video data at data word boundaries. As a result, when the memory controller fetches the data words storing a slice group, there is likely to be leading data before the slice group and trailing data following the slice group.
Further limitations and disadvantages of conventional and traditional approaches will become apparent to one of ordinary skill in the art through comparison of such systems with the present invention as set forth in the remainder of the present application with reference to the drawings.